package com.rabbiter.hospital.controller;

import com.rabbiter.hospital.pojo.Checks;
import com.rabbiter.hospital.service.CheckService;
import com.rabbiter.hospital.utils.ResponseData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("check")
public class CheckController {
    @Autowired
    private CheckService checkService;

    /**
     * 分页模糊查询所有检查信息
     * @param pageNumber 页码
     * @param size       每页大小
     * @param query      模糊查询的关键词
     * @return 包含所有检查信息的响应数据对象
     */
    @RequestMapping("findAllChecks")
    public ResponseData findAllChecks(int pageNumber, int size, String query) {
        return ResponseData.success("返回所有检查信息成功", this.checkService.findAllChecks(pageNumber, size, query));
    }

    /**
     * 根据id查找检查
     * @param chId 检查的唯一标识符
     * @return 包含查找结果的响应数据对象
     */
    @RequestMapping("findCheck")
    public ResponseData findCheck(int chId) {
        return ResponseData.success("根据id查找检查成功", this.checkService.findCheck(chId));
    }

    /**
     * 增加检查信息
     * 该方法用于接收新增检查信息的请求，并尝试将检查信息添加到系统中
     * @param checks 包含检查信息的Checks对象，通过此参数传递新增的检查信息
     * @return 返回一个ResponseData对象，包含操作结果和相应消息
     * 说明：
     * 1. 使用@RequestMapping注解指定该方法处理/addCheck路径的请求
     * 2. 通过@，ResponseBody注解确保方法返回的结果直接写入HTTP响应体中
     * 3. 调用checkService中的addCheck方法尝试添加检查信息，若成功则返回成功消息，否则返回失败消息
     */
    @RequestMapping("addCheck")
    @ResponseBody
    public ResponseData addCheck(Checks checks) {
        Boolean bo = this.checkService.addCheck(checks);
        if (bo) {
            return ResponseData.success("增加检查信息成功");
        }
        return ResponseData.fail("增加检查信息失败！账号或已被占用");
    }

    /**
     * 删除检查信息
     * 该方法通过chId参数来标识要删除的检查信息
     * 使用了@RequestParam注解来从请求中获取chId参数
     * @param chId 检查信息的唯一标识符
     * @return 包含操作结果的ResponseData对象
     */
    @RequestMapping("deleteCheck")
    public ResponseData deleteCheck(@RequestParam(value = "chId") int chId) {
        Boolean bo = this.checkService.deleteCheck(chId);
        if (bo) {
            return ResponseData.success("删除检查信息成功");
        }
        return ResponseData.fail("删除检查信息失败");
    }

    /**
     * 修改检查信息
     * 该方法通过接收一个Checks对象来修改检查项目的信息
     * 使用了@RequestMapping注解来处理HTTP POST请求，并且使用了@ResponseBody注解
     * 使得返回的对象直接序列化为JSON格式并返回给客户端
     * @param checks 包含需要修改的检查项目信息的Checks对象
     * @return 返回一个ResponseData对象，表示修改操作的结果
     */
    @RequestMapping("modifyCheck")
    @ResponseBody
    public ResponseData modifyCheck(Checks checks) {
        this.checkService.modifyCheck(checks);
        return ResponseData.success("修改检查项目信息成功");
    }


}
